package com;
import java.util.Scanner;
public class studentView {
//    start方法用于展示我们的页面以及调用对应的功能
//   需要一直循环执行展示
    /*            以后需要反复录入所以没必要执行一次方法就new一次scanner
    所以将scanner放在成员位置
     */
    Scanner sc=new Scanner(System.in);
    /*数组，长度为50，代表班级最多可以放50个人，后面每个功能都需要使用数组，所以可以将数组放到成员位置
    需要定义变量去记录存了多少个元素count=0，一次count++，遍历count次，不能全部遍历，因为没有存放对象的位置遍历出来是null，在调用getxxx方法，会出现空指针
    所以我们应该记录存储对象的个数，存多少个对象就遍历多少次，而且后边可能反复使用count，所以需要提升到成员位置
    有效避免空指针，记录数组有多少个对象
    */
    student[] students =new student[50];
    int count=0;
    /*设置一个新数组，一会删除数组的时候需要将删除后剩下的数组元素复制到新数组内
    * 因为数组长度定长，所以不能直接在原来的数组基础上随意改变程度、
    * 由于一次删一个所以新数组长度为老数组长度-1，后面可能会反复使用，所以需要提升*/
    student[] newstudents=new student[students.length-1];

    public void start(){
        while (true){
            System.out.println("\n============学生管理系统============");
            System.out.println("1.添加学生");
            System.out.println("2.修改学生");
            System.out.println("3.删除学生");
            System.out.println("4.查看学生");
            System.out.println("5.退出系统");
            System.out.println("请选择（1-5）：");
//            输入的序号
            int num=sc.nextInt();
            System.out.println("--------------------------------------------\n\n");
            switch (num){
                case 1:add();break;
                case 2:update();break;
                case 3:delete();break;
                case 4:findall();break;
                case 5: System.out.println("是否退出？按0为退出，按9为取消");
                int key=sc.nextInt();
                if (key==0)
                {
                    System.out.println("再见，欢迎回来");
                    return;//结束方法
                }
                else if (key==9){
                    break;
                }
                default:
                    System.out.println("请输入正确数字！");
            }
        }
    }


    /*输出学生信息*/
    private void findall() {
        System.out.println("学号"+"\t"+"姓名"+"\t"+"年龄"+"\t"+"性别"+"\t");
//        排序是为了防止删除后重新添加之前删除序号对应学生而乱序
        for (int i = 0; i < count-1; i++) {
            for (int j = 0; j < count-i-1; j++) {
                if (students[i].getId()>students[i+1].getId())
                {
                    student temp=students[i];
                    students[i]=students[i+1];
                    students[i+1]=temp;
                }
            }
        }
//        如果count为0时证明，没有添加过学生
if (count==0){
    System.out.println("对不起，现在班级里没有学生，待开班....");
}else {
//    我我们添加几个学生count就是几，就应该遍历几次
    for (int i = 0; i < count; i++) {
        System.out.println(students[i].getId()+"\t"+"\t"+students[i].getName()+"\t"+"\t"+students[i].getAge() +"\t"+"\t"+ students[i].getSex()+"\t");
    }
}
    }
/*删除功能*/
    private void delete() {
//只能造一个新数组
//1.输入要删除的学生学号
        System.out.println("请输入要删除学生学号");
        int id=sc.nextInt();
//        根据id查询学生对应索引位置,要移除的下标等于找到的下标
      int removeindex=ArrayUtils.findindexbyid(students,id,count);
//      先复制被删除元素前面一部分
System.arraycopy(students,0,newstudents,0,removeindex);
//    再复制被删除元素后面一部分
        System.arraycopy(students,removeindex+1,newstudents,removeindex,students.length-removeindex-1);
//       需要将新数组的值修改为老数组
        students=newstudents;
//        删除完之后,count代表的是学生个数
        count--;
        System.out.println("删除成功");
    }

/*修改学生信息*/
    private void update() {
//        修改
//1.录入修改学生学号
//2.修改后不能将id当成索引去存储新的学生对象，因为id和数组中索引是对应的
//3.解决根据id查出对应学生在数组中的索引
        System.out.println("请输入您要修改的学生学号");
        int id=sc.nextInt();
//        定义一个工具类，专门根据id查询索引，括号里面是传什么数
      int updateindex=ArrayUtils.findindexbyid(students,id,count);
        System.out.println(updateindex);
        System.out.println("请输入修改学生信息");
        System.out.println("请输入修改学生姓名");
        String name=sc.next();
        System.out.println("请输入修改学生年龄");
        int age=sc.nextInt();
        System.out.println("请输入修改学生性别");
        String sex=sc.next();
       student student= new student(id,name,age,sex);
       students[updateindex]=student;
        System.out.println("修改成了");
    }


    /*  增加学生信息*/
    private void add(){
//1.键盘录入学生信息，
        System.out.println("请输入学生信息");
        System.out.println("请输入学生学号");
            int id=sc.nextInt();
        System.out.println("请输入学生姓名");
             String name=sc.next();
        System.out.println("请输入学生年龄");
                int age=sc.nextInt();
        System.out.println("请输入学生性别");
                 String sex=sc.next();
// 2.将学生信息封装到student对象中
//        利用student有参构造封装对象
        student student = new student(id, name, age, sex);
// 3.将封装好的student对象放到student数组之中
//students[索引值]=student
        students[count]=student;
        count++;
        System.out.println("添加成功");
    }
}
